home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power CD
/
Power CD ATARI-Rechner Lieben.iso
/
UTILITY
/
MENUDLX
/
QUELLTXT
/
MENUDLX.LST
< prev
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
NeXTSTEP
RISC OS/Acorn
UTF-8
Wrap
File List
|
1991-09-02
|
33.9 KB
|
1,118 lines
' G F A - M E N U - D e l u x e
' ===============================================
'
' Filenamen: MENUDLX.GFA (Programmfile)
' MENUDLX.INL
' MENUDLX.DAT (Filesystem)
' MENUDLX.TXT (Info-File)
'
' Entwicklung: Thomas Schaerer Im Lindenhof 6 CH-8307 Effretikon
'
' -----------------------------------------------------------------------------
'
'
identification$=" MENUDLX.PRG ist programmiert in GFA-3.5-BASIC !"
'
defines ! Startdefinitionen
startup ! Initialisierung
main ! Hauptprogramm
'
'
> PROCEDURE defines ! RESERVE, Comp-Opt, Aktueller Pfad, Definitionen
$E$ ! Fehlermeldung als Text.
$s&,s<,f<,p> ! Compilations-Optionen.
$m7000 ! Speicherbedarf als Compilat.
RESERVE 7000 ! Speicherbedarf im Interpreter.
.PL73 ! Ausdruck: Anzahl Zeilen pro Seite.
.N0 ! Ausdruck: Ohne Zeilennummern.
path_read ! Aktueller Pfad lesen.
maindrive$=drive_read$ ! Aufteilung nötig für Wieder-
mainpath_only$=path_read$ ! herstellung in 'main_path_write'.
mainpath$=maindrive$+":"+mainpath_only$+"\" ! Vollständiger Pfad.
p$=mainpath$ ! p$ verändert sich.
'
button%=1
esc%=27 ! Escape-Sequenzen
t_wait$="G3WAIT=ON" ! _ nicht warten.
t_move$="G3MOVE=ON" ! _ nicht moven.
cobj$="" ! Zusätzliche O-Files für Linker.
RETURN
> PROCEDURE startup ! Filesystem, BASEPAGE, Pulldown-Menu-Definitionen
CLS
file_parameter(pfad$,anz_zeichen%) ! Fileparameter aus der BASEPAGE.
relat_absol_filepar ! Pfad in BASEPAGE absolut oder relativ?
menudlx.dat ! Filesystem aus MENUDLX.DAT lesen.
' file_system ! Das Filesystem betrachten.
IF anz_zeichen%>0
IF EXIST(pfad$)
IF RIGHT$(pfad$,4)=".GFA"
f$=pfad$
filepar_flag%=TRUE ! Siehe weiter in Proz. 'do_fsel(...)'.
ELSE
sbb_bell
ALERT 1," |Sorry, aber mich interes- |sieren nur GFA-Files! ",1," Weiter | Abbruch",ret%
IF ret%=2
ende
ENDIF
ENDIF
ELSE
f$=""
sbb_bell
ALERT 1," |Filename existiert nicht |oder Pfad ist falsch! ",1," Weiter | Abbruch",ret%
IF ret%=2
ende
ENDIF
ENDIF
ENDIF
'
'
fh%=INT{L~A-46} !Zeichenhöhe
' INLINE: Zählen der Interpreterzeilen beim Compilieren:
INLINE irq%,&HD6
{irq%+2}=V:a&
BYTE{irq%+6}=32+35 !WORK_OUT(0)/8-5
DIM a$(100)
FOR i%=0 TO 100
READ a$(i%)
EXIT IF a$(i%)="*"
NEXT i%
coi&=0 ! Kein I
cos&=3 ! S& und s<
cof&=1 ! F<
cod&=0 ! Kein %3
com&=0 ! Kein *&
coe&=0 ! Kein E
cop&=0 ! Kein P>
dbsym&=0 ! keine DebugSymbole
auto&=0 ! Nicht xxx.prg aus xxx.gfa
DATA
DATA Wer steckt dahinter?
DATA -------------------------,1,2,3,4,5,6,
DATA File
DATA Auswahl ^A
DATA Compiler ^C
DATA Interpreter ^I
DATA Linker ^L
DATA RCS ^R
DATA -----------------
DATA Test ^T
DATA Execute ^X
DATA -----------------
DATA Quit ^Q
DATA
DATA Optionen
DATA Interrupts ◆I
DATA Select ◆S
DATA Functions ◆F
DATA Procedures ◆P
DATA IntDiv ◆/
DATA IntMul ◆*
DATA Error ◆E
DATA -----------------
DATA Memory ◆M
DATA -----------------
DATA DebugSym ◆D
DATA
DATA Sets
DATA G3WAIT W
DATA G3MOVE M
DATA --------------
DATA G3OBJ O
DATA G3PRG P
DATA G3LIB L
DATA PRG=GFA F2
DATA C-Object C
DATA
DATA Extras
DATA Editor ^E
DATA Finder ^F
DATA GULAM ^G
DATA Hilfe ^H
DATA Filesystem
DATA Undo (Bild)
DATA -------------
DATA ,,,*
MENU a$()
MENU 42,auto&
RETURN
> PROCEDURE main ! DO --- ON MENU --- LOOP
ON MENU GOSUB men
ON MENU KEY GOSUB key
cur
@cls ! Hintergrund zum ersten Mal.
DO
ON MENU 100
laufzeichen
IF MOUSEK
CLR complink% ! Löschwirkung durch MENU und Tastatur, siehe
ENDIF ! Prozedur 'check(x)'.
IF complink%=TRUE
complinkend ! Blinkende Anzeige: Compilieren und Linken beendet.
ENDIF
LOOP
RETURN
'
> PROCEDURE key ! Wird aufgerufen bei Tastendruck.
' PRINT HEX$(MENU(14),4)'''' ! Test neuer CASE.
key%=MENU(14)
IF BYTE(key%)>64
SUB key%,32 !upper
ENDIF
SELECT BYTE(key%) ! Diese ASCII-Codes ohne Scan-code
CASE "*","/","O","L","P","M","W","C"
key%=BYTE(key%)
ENDSELECT
SELECT key% ! Nur die nötigen Tastenkombinationen sind wirksam.
CASE &H1E01,&H3B00,&H2E03,&H440,&H1709,&H260C,&H1312,&H1414,&H2D18,&H1011,&H4400
check(key%)
CASE &H1700,&H1F00,&H2100,&H1900,&H7E00,&H7F00,&H1200,&H3200,&H2000,&H3C00,&H2207
check(key%)
CASE &H1205,&H2106,&H2707,&H2308,&H6100,&H6200,"W","M","O","P","L","C","/","*"
check(key%)
ENDSELECT
RETURN
> PROCEDURE check(x%) ! Wird aufgerufen bei Pulldownklick u. Taste.
LOCAL exten$,ret%,anz%
'
' PRINT x% ! Test neuer Menu- und Tastenwerte.
' STOP
CLR complink%
MENU KILL
SELECT x%
CASE -1 ! Wer steckt dahinter....
hintergrund(7)
info(155,101)
@cls
CASE -11,&H1E01,&H3B00 ! ^A, F1
exec_flag%=NOT TRUE
do_fsel(".GFA",f$)
IF f$<>"" AND RIGHT$(f$,4)<>".GFA" AND button%=1
sbb_bell
ALERT 1," |Sorry, aber mich interes- |sieren nur GFA-Files!",1," Gewiss ",dummy%
CLR f$
ENDIF
CASE -12,&H2E03 ! ^C
IF @chk_file(f$)
file_exist(weiter%) ! Existiert das PRG/TOS-File schon?
IF weiter%=TRUE
keyclr
@cls
compile
ENDIF
ENDIF
CASE &H4400 ! F10
IF @chk_file(f$)
file_exist(weiter%) ! Existiert das PRG/TOS-File schon?
IF weiter%=TRUE
@cls
compile
IF e_com%=0 ! Nur linken wenn Compil. ohne Fehler.
link
IF e_link%=0 ! e_link + e_com = 0
PRINT ! Wegen Zeilenabstand.
PRINT
complink%=TRUE
ENDIF
ENDIF
ENDIF
ENDIF
CASE -13,&H1709 ! ^I
interpr
CASE -14,&H260C ! ^L
file_exist(weiter%) ! Existiert das PRG/TOS-File schon?
IF weiter%=TRUE
@cls
link
IF e_com%=0 AND e_link%=0
PRINT ! Wegen Zeilenabstand.
PRINT
complink%=TRUE
ENDIF
ENDIF
CASE -15,&H1312 ! ^R GFA-Resource-Constr.-Set.
rcs
CASE -17,&H1414 ! ^T Test des comp. Programmes.
test_progr
CASE -18,&H2D18 ! ^X Aufruf eines ext. Programmes.
exec_flag%=TRUE
progr_ext
CLR button%
CASE -20,&H1011 ! ^Q
endfrage ! Zur Alert-Box: Endfrage (ts).
CASE -23,&H1700 ! ~I
INC coi&
CASE -24,&H1F00 ! ~S
INC cos&
CASE -25,&H2100 ! ~F
INC cof&
CASE -26,&H1900 ! ~P
INC cop&
CASE -27,&H7E00,"/" ! /
INC cod&
CASE -28,&H7F00,"*" ! *
INC com&
CASE -29,&H1200 ! ~E
INC coe&
CASE -31,&H3200 ! ~M
PRINT AT(63,3);"Memory: ";
FORM INPUT 7 AS m$
n=INT(VAL(m$))
IF n>1000000000 OR n<=0
m$=""
ELSE
m$=STR$(n)
ENDIF
CASE -33,&H2000 ! ~D
INC dbsym&
CASE -36,"W" ! W
SWAP twait$,t_wait$
help
CASE -37,"M" ! M
SWAP tmove$,t_move$
help
CASE -39,"O" ! O
in(tobj$)
CASE -40,"P" ! P
IF auto%=1
sbb_bell
ALERT 1,"Sie befinden sich im |Widerspruch! |PRG=GFA oder Editieren? |Beides geht nicht! ",1," Aha! ",dummy%
ELSE
in(tprg$)
ENDIF
CASE -41,"L" ! L
in(tlib$)
CASE &H6100 ! undo
@cls
CASE &H6200 ! help
help
CASE -42,&H3C00 ! F2 Compilat = Filenamen oder nicht.
IF RIGHT$(f$,4)=".GFA"
auto%=XOR(auto%,1) ! PRG=GFA oder nicht.
IF auto%=0
tprg$="G3PRG="+mainpath$+"COMPILAT\TEST.PRG" ! Defaultpfad.
ENDIF
help
ELSE ! Falls das GFA-File noch nicht gwählt wurde durch ^A.
sbb_bell
ALERT 1,"Sinnlose Umschaltung! | |Bitte wählen Sie erst |das GFA-File!",1," Okay! ",dummy%
ENDIF
CASE -43,"C" ! C C-Objekt-Datei.
@cls
PRINT AT(1,7);" C-O-Files: ";
FORM INPUT 70 AS cobj$
@cls
CASE -46,&H1205 ! ^E Aufruf zusätzl. Editor.
editor
CASE -47,&H2106 ! ^F Aufruf eines File-Finders.
finder
CASE -48,&H2207 ! ^G Aufruf des GULAM.
gulam
CASE -49,&H2308 ! ^H Hilfe?
sbb_bell
ALERT 1," |Hahahahahaha... |Was Sie wollen MIR helfen? |",1," Äää... ",dummy%
CASE -50
file_system
@cls
CASE -51 ! UNDO Bildregeneration.
@cls
ENDSELECT
MENU a$()
MENU 42,auto% ! Setzt Häckchen ins Pulldownfeld 'PRG=GFA'.
ON MENU GOSUB men
ON MENU KEY GOSUB key
com_opt
keyclr
menu_info
RETURN
> PROCEDURE men ! Wird aufgerufen bei Klick im Pulldown.
check(-MENU(0))
RETURN
> PROCEDURE cls ! Wiederaufbau des Menues.
PRINT AT(1,1)
' ~FORM_DIAL(3,0,0,0,0,0,0,WORK_OUT(0),WORK_OUT(1)) ! Besser nicht...
hintergrund(3)
xx%=375 ! Neustart des Laufzeichen.
titel
IF exec_flag%=NOT TRUE
com_opt ! Erneuerung der Optionen-Anzeige.
ENDIF
RETURN
> PROCEDURE help ! Anzeige von 'wait, move, Pfade'.
LOCAL anz%,i%
'
@cls
anz%=MAX(LEN(tmove$),LEN(tlib$),LEN(tobj$),LEN(tprg$),LEN(twait$))
cur
stor_curs
FOR i%=0 TO 4 ! Weisse Fläche für die Help-Wiedergabe richtet
PRINT SPACE$(anz%+1) ! sich nach dem längsten darzustellenden String.
NEXT i%
restor_curs
PRINT UPPER$(twait$) ! Help-Anzeige: wait
PRINT UPPER$(tmove$) ! move
PRINT UPPER$(tlib$) ! Pfad der Haupt-Bibliothek.
PRINT UPPER$(tobj$) ! Pfad des GFA-Objektcodes.
PRINT UPPER$(tprg$) ! Pfad des Programmes.
RETURN
> PROCEDURE com_opt ! Anzeige der Optionen.
LOCAL i%
'
co$=""
IF com& AND 1
co$=co$+" *&"
ENDIF
IF cod& AND 1
co$=co$+" %3"
ENDIF
IF cos& AND 1
co$=co$+" S&"
ENDIF
IF cos& AND 2
co$=co$+" S<"
ENDIF
IF coe& AND 1
co$=co$+" E$"
ENDIF
IF coe& AND 2
co$=co$+" E-"
ENDIF
IF coi& AND 1
co$=co$+" I+"
ENDIF
IF cof& AND 1
co$=co$+" F<"
ENDIF
IF cop& AND 1
co$=co$+" P>"
ENDIF
IF LEN(m$)
co$=co$+" m"+m$
ENDIF
IF auto%=1
IF RIGHT$(f$,4)=".GFA"
z$="G3PRG="+LEFT$(f$,LEN(f$)-4)+".PRG"
IF z$<>tprg$
tprg$=z$
ENDIF
ENDIF
ENDIF
IF LEN(co$)>lastlen_co% ! Länge der weissen Fläche richtet sich nach dem
lastlen_co%=LEN(co$) ! längsten Eintrag.
ENDIF
IF RIGHT$(f$,4)=".GFA" ! Übernahme des Filenamens nur wenn es ein
ff$=f$ ! GFA-File ist.
ELSE IF exec_flag=NOT TRUE AND button%=1
ff$="Nur GFA-File laden!"
ENDIF ! button% = Tasten der FS-Box.
i%=MAX(LEN(ff$),(LEN(cobj$)+8),lastlen_co%+5) ! Länge des weissen Feldes.
DEFFILL 0
PBOX 2,fh%*2,10+(i%*8),5*fh%+2 ! Weisse Fläche für Schrift.
BOX 1,fh%*2-1,11+(i%*8),5*fh%+3 ! Rahmen um die weisse Fläche.
TEXT 3,fh%*3,ff$ ! Auswahl-Pfad des GFA-Files..
TEXT 3,fh%*4,"Com:"+co$ ! Compileroptionen.
TEXT 3,fh%*5,"Lnk:" ! Linkeroptionen.
IF dbsym& AND 1
TEXT 43,fh%*5,"-s" ! Debug-Information
ENDIF
TEXT 67,fh%*5,UPPER$(cobj$)
cur
RETURN
> PROCEDURE do_fsel(x$,VAR f$) ! Aufruf der Fileselector-Box.
LOCAL p1_new$
'
p1$=p$+"*"+x$
p1_new$=p1$ ! Wegen der Vorwahl des Extention-Knopfes.
' f$="" ! verändert !!!!!!!!
IF FSEL_INPUT(p1_new$,file$,button%)
IF button%=1 ! Taste 'Okay'.
CLR filepar_flag% ! Weil mit FS-Box neues File gelesen wurde.
p1$=p1_new$ ! Pfad wird nur mit 'Okay' übernommen.
f$=file$
file_mem$=file$ ! Zusatzspeicherung benötigt, weil 'f$' ändert.
ELSE ! Taste 'Abbruch'.
IF filepar_flag%=TRUE ! Wenn MENUDLX mit Fileparameter gestartet
p1$=pfad$ ! und FS-Box abgebrochen wurde.
file_von_pfad ! Filename aus Pfad maskieren.
ELSE
f$=file_mem$
x$=""
ENDIF
ENDIF
' PRINT "Pfad: ";p1$ ! Nur für Parameter-Test.
' PRINT "File: ";f$ ! " " " " .
' taste ! " " " " .
IF RIGHT$(f$,4)=".TOS"
HIDEM ! Maus verstecken bei TOS-Programmen.
ENDIF
WHILE RIGHT$(f$)=CHR$(0)
f$=LEFT$(f$,LEN(f$)-1)
WEND
p%=RINSTR(p1$,"\")
IF p%
p1$=LEFT$(p1$,p%)
ENDIF
IF RIGHT$(f$)="."
f$=LEFT$(f$,LEN(f$)-1)
ENDIF
IF f$<>""
IF INSTR(f$,".")=0
f$=f$+x$
ENDIF
f$=p1$+f$
p$=p1$
ENDIF
ELSE
f$=""
ENDIF
@cls ! Damit nach der Filesectorbox der Titel wieder erscheint.
RETURN
> PROCEDURE cur ! Sorgt für 'crslin > 7' and 'crscol = 1'.
IF CRSLIN<7
PRINT AT(1,7);
ENDIF
IF CRSCOL>1
PRINT
ENDIF
SETCOLOR 0,&H777
SETCOLOR 3,0
SETCOLOR 15,0
DEFMOUSE 0
RETURN
> PROCEDURE interpr ! Interpreter
LOCAL ret%
'
IF LEN(f$) AND RIGHT$(f$,4)=".GFA"
f1$=" - "+f$ ! Wird dem Interpreter übergeben.
ret%=1
ELSE
f1$=""
sbb_bell
ALERT 1," |GFA-File wurde nicht geladen! |Was soll geschehen? ",1," INTERP. | Menu ",ret%
ENDIF
IF ret%=1
revrs_curs
anz%=MAX(LEN(gfaint$),LEN(f$))
PRINT AT(1,18);
stor_curs
FOR i%=0 TO 1 ! Damit beide Zeilen gleich lang werden.
PRINT SPACE$(anz%+26)
NEXT i%
restor_curs
PRINT " Starting (Interpreter): ";gfaint$ ! Pfad des Interpreters.
PRINT " Starting (GFA-File): ";f$ ! Pfad des GFA-Files.
norm_curs
PAUSE 50 ! Damit Pfade etwas länger lesbar sind (ts).
IF f$<>""
pfad_file$=f$
pfad_nur ! Pfad ohne Filename.
p_current$=pfadnur$ ! Anpassung des aktuellen Pfades an den
new_path_write ! des GFA-Files welches ausgewählt wurde.
ENDIF
t%=TIMER
e%=EXEC(0,gfaint$,f1$,"")
main_path_write
IF e%=-33
sbb_bell
ALERT 1," | |Leider ist der Interpreter |nicht ansprechbar!",1," Aha! ",dummy%
ELSE
@cls ! Zurück von ext. Programm, wieder grauer Hintergrund (ts).
revrs_curs
PRINT "Arbeitszeit im Interpreter:"
norm_curs
tmx
ENDIF
ENDIF
RETURN
> PROCEDURE compile ! Compiler
revrs_curs
PRINT AT(1,7);"Ruhe, ich übersetze gerade! "
norm_curs
stor_curs
t%=TIMER
env
i_on
PRINT AT(30,1);" ";
PRINT AT(42,1);"<--- Zeile" ! Daneben die Zeilennummern.
restor_curs ! Der Compiler setzt manchmal den Cursor auf 1,1.
e_com%=EXEC(0,gfacom$,"X"+f$+co$,env$)
IF e_com%=-33
sbb_bell
ALERT 1," |Wie soll ich bloss ein GFA- |File übersetzen, wenn ich |keinen COMPILER finde!",1," Stimmt ",dummy%
ELSE IF e_com%>0
sbb_bell
ALERT 1," |Eine böse Überraschung! |"+STR$(e_com%)+" Befehle wurden nicht | übersetzt.",1,"Abbruch!",dummy%
ENDIF
i_off
tmx
RETURN
> PROCEDURE link ! Linker
HIDEM
revrs_curs
PRINT AT(1,11);"Ich linke jetzt! "
norm_curs
t%=TIMER
IF dbsym& AND 1
s$="-s "
ELSE
s$=""
ENDIF
env
e_link%=EXEC(0,gfalnk$,"X"+s$+cobj$,env$)
IF e_link%=0
tmx
ELSE IF e_link%=-33
tmx
sbb_bell
ALERT 1," |Entweder ist der LINKER nicht |anwesend, oder es hat Fehler |in den Parametern! ",1," Hmmm? ",dummy%
ELSE IF e_link%>0
cl_line_after_curs
PRINT
cl_line_after_curs
PRINT
tmx
cls_after_curs
sbb_bell
ALERT 1," |Anzahl undefinierter Symbole |und/oder Offsetüberschrei- |tungen: "+STR$(e_link%),1," Ojee! ",dummy%
ENDIF
keyclr
SHOWM
RETURN
> PROCEDURE test_progr ! Starten des compilierten Programmes.
t$=UPPER$(MID$(tprg$,7))
IF EXIST(t$)
IF RIGHT$(t$,4)=".TTP"
sbb_bell
ALERT 1,"Um TTP-Programme zu starten, |benutzen Sie einen Zeilen- |kommandointerpreter oder |eine geeignete Shell!",1," Jawohl ",dummy%
ELSE
IF t$<>""
pfad_file$=t$
pfad_nur ! Pfad ohne Filename.
p_current$=pfadnur$ ! Anpassung des aktuellen Pfades an den
new_path_write ! des GFA-Files welches ausgewählt wurde.
ENDIF
hintergrund(7)
revrs_curs
PRINT AT(1,17);"Executing: ";t$ ! Programmstart-Anzeige.
norm_curs
PAUSE 37
t%=TIMER
SHOWM
~EXEC(0,t$,"","")
main_path_write ! Hauptpfad wiederherstellen.
@cls ! Zurück von comp. Programm, wieder grauer Hintergrund (ts).
revrs_curs
PRINT "Arbeitszeit des Testprogrammes:"
norm_curs
tmx
ENDIF
ELSE
sbb_bell
ALERT 1,"| | Wo nichts ist, | läuft auch nichts! ",1," Jaja! ",dummy%
ENDIF
RETURN
> PROCEDURE progr_ext ! Aufruf eines externen Programmes.
ALERT 2," | |PRG oder TOS ? |Das ist hier die Frage. ",1," PRG | TOS ",ret%
IF ret%=1 ! Entscheiden zwischen PRG oder TOS.
exten$=".PRG"
ELSE IF ret%=2
exten$=".TOS" ! Maus verstecken HIDEM folgt direkt vor TOS-Aufruf.
ENDIF
do_fsel(exten$,x$) ! HIDEM in dieser Prozedur, falls TOS gilt.
IF button%=1 AND (RIGHT$(file$,4)=".PRG" OR RIGHT$(file$,4)=".TOS")
p_current$=p$
new_path_write ! Neuer Pfad für externes Programm.
hintergrund(7)
revrs_curs
PRINT AT(1,17);"Executing: ";UPPER$(x$)
norm_curs
PAUSE 37
t%=TIMER
e%=EXEC(0,x$,"","") ! Nur falls PRG oder TOS gewählt wurde.
main_path_write ! Hauptpfad wiederherstellen.
SHOWM ! Wenn von xxxx.TOS retour nötig.
@cls ! Zurück von ext. Programm, wieder grauer Hintergrund.
cur
revrs_curs
PRINT "Arbeitszeit des externen Programmes:"
norm_curs
tmx
ELSE IF button%=1 AND RIGHT$(file$,4)=".TTP"
sbb_bell
ALERT 1,"Um TTP-Programme zu starten, |benutzen Sie GULAM oder |einen andern Zeilenkommando- |interpreter!",1," Jawohl ",dummy%
ELSE IF button%=1
sbb_bell
ALERT 1,"| |PRG oder TOS sollte |es schon sein! ",1," Klar! ",dummy%
ENDIF
exec_flag%=NOT TRUE
RETURN
> PROCEDURE rcs ! Direktaufruf des GFA-Recource-Constr.-Set.
hintergrund(7)
revrs_curs
PRINT AT(1,18);"Starting: ";gfarcs$
norm_curs
t%=TIMER
SHOWM
e%=EXEC(0,gfarcs$,"","")
IF e%=-33 ! RSC gibt es nicht.
sbb_bell
ALERT 1,"|Tut mir leid, aber das |Resource-Programm konnte |ich nicht finden! ",1," Ach so ",dummy%
@cls
ELSE
@cls
revrs_curs
PRINT "Arbeitszeit im Resource-Constr.-Set:"
norm_curs
tmx
ENDIF
RETURN
> PROCEDURE env ! Environment-String für den Compiler.
n$=CHR$(0)
env$=tobj$+n$+tprg$+n$+tlib$+n$+twait$+n$+tmove$+n$
RETURN
> PROCEDURE in(VAR a$) ! Editieren der Pfade.
b$=MID$(a$,7)
revrs_curs
PRINT AT(1,17);"Editiere: "
norm_curs
PRINT AT(1,17);
PRINT LEFT$(a$,6);
FORM INPUT 60 AS b$
b$=TRIM$(b$)
IF LEN(b$)
a$=LEFT$(a$,6)+b$
ENDIF
help
RETURN
> PROCEDURE i_on
IF INT{irq%} ! nix wenn irq% leer
p%=LPEEK(&H456)
FOR i%=p% TO p%+31 STEP 4
IF LPEEK(i%)=0
SLPOKE i%,irq%
i%=p%+31
ENDIF
NEXT i%
{BASEPAGE+132}=irq%
{BASEPAGE+128}=&H4030201
ENDIF
RETURN
> PROCEDURE i_off
{BASEPAGE+128}=0
p%=LPEEK(&H456)
FOR i%=p% TO p%+31 STEP 4
IF LPEEK(i%)=irq%
SLPOKE i%,0
ENDIF
NEXT i%
RETURN
> PROCEDURE keyclr
REPEAT ! Lösche GEM Tastaturpuffer.
UNTIL EVNT_MULTI(33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100)=32
RETURN
> PROCEDURE endfrage
LOCAL button%
' Aus PROCEDURE chek(x%)
sbb_bell
message$="| |Haben Sie wirklich etwas |Besseres vor? "
button$=" Klar! | Nein. "
ALERT 2,message$,2,button$,button% ! Alertbox - Endfrage
IF button%=1
ende
ENDIF
RETURN
> PROCEDURE ende
RESERVE ! Speicher wider freigeben.
CLS
EDIT ! Falls etwas verbessert werden soll im Interpreter....
RETURN
'
> PROCEDURE info(x%,y%) ! Bildmitte ca. x = 155 , y = 101 , nur unger. Zahlen.
HIDEM
GRAPHMODE 1
DEFFILL 1,2,8
PBOX x%+5,y%+5,x%+361,y%+231
DEFFILL 0,2,8
PBOX x%,y%,x%+356,y%+226
DEFFILL 1,2,4
PBOX x%+3,y%+3,x%+353,y%+223
BOX x%+2,y%+2,x%+354,y%+224
BOX x%,y%,x%+356,y%+226
schreibe(x%+26,y%+41,26,"GFA-MENU-DELUXE")
schreibe(x%+26,y%+80,16,"Thomas Schaerer ")
schreibe(x%+26,y%+104,16,"Im Lindenhof 6")
schreibe(x%+26,y%+128,16,"CH-Effretikon (Schweiz)")
schreibe(x%+26,y%+155,8,"Dieses Programm wird mit der")
schreibe(x%+26,y%+169,8,"dazugehörigen GFA-3.5-BASIC-")
schreibe(x%+26,y%+183,8,"Datei, gratis an GFA-Basic-")
schreibe(x%+26,y%+197,8,"Enthusiasten weitergegeben.")
REPEAT
UNTIL MOUSEK=0
REPEAT
GOSUB schreibe(x%+26,y%+41,26,"GFA-MENU-DELUXE")
GRAPHMODE 3
UNTIL MOUSEK=1 OR MOUSEK=2 OR INKEY$<>""
GRAPHMODE 1
SHOWM
RETURN
> PROCEDURE schreibe(xx%,yy%,zz%,text$) ! Gehört zur Prozedur 'info'.
DEFTEXT 1,0,0,zz%
GRAPHMODE 2
TEXT xx%,yy%,text$
DEFTEXT 1,2,0,zz%
GRAPHMODE 3
TEXT xx%-1,yy%-1,text$
GRAPHMODE 1
RETURN
> PROCEDURE hintergrund(muster%)
DEFFILL 1,2,muster%
PBOX -1,18,640,400
RETURN
> PROCEDURE tmx ! Vollständig neue Zeitanzeige in H:M:S (ts).
cur
d_time=(TIMER-t%)/200 ! Zeitdifferenz in Sekunden
PRINT "Zeit: ";
IF d_time<60
PRINT USING "##.###",d_time;
PRINT " Sek. ";
ELSE IF d_time<3600
PRINT INT(d_time/60);" Min. ";
PRINT USING "##.###",d_time MOD 60;
PRINT " Sek. ";
ELSE
PRINT INT(d_time/3600);" Std. ";INT(d_time/60) MOD 60;" Min. ";
PRINT USING "##.###",d_time MOD 60;
PRINT " Sek. ";
ENDIF
RETURN
> PROCEDURE menu_info ! Zusätzliche Infos über Einstellungen in Menuzeile.
IF auto%=1
stor_curs
revrs_curs
PRINT AT(65,1);"PRG=GFA";
norm_curs
restor_curs
ENDIF
RETURN
> PROCEDURE titel ! GFA-MENU-DELUXE
DEFFILL 1,1,8
PBOX -1,360,640,400
GRAPHMODE 3
DEFTEXT 1,4,0,18
TEXT 1,380,"G F A - M E N U E - D e l u x e"
DEFTEXT 1,0,0,6
TEXT 500,380,"GFA-3.x-BASIC"
DEFTEXT 1,4,0,6
TEXT 1,398,"Für den I N T E R P R E T E R und den C O M P I L E R ."
DEFTEXT 1,0,0,13 ! Wieder normale Schrift
GRAPHMODE 0
PRINT AT(1,20);
PRINT " <F10> = Kompilieren und Linken, nach Auswahl (^A oder F1). "
PRINT " <HELP> = Parameter des Sets-Menue und Bildregeneration. "
PRINT " <UNDO> = Bildregenaration des Menue (z.B. nach Accessory). "
curs_home
RETURN
> PROCEDURE laufzeichen
DEFTEXT 1,0,0,4
GRAPHMODE 3
IF xx%<550 OR xx%>620 ! Dies ist einerseits eine Spielerei, ander-
xx%=550 ! seits kann man gewisse Abstürze leicht
ENDIF ! durch dessen Stoppen erkennen.
TEXT xx%,398,"_" ! Und überhaupt, warum immer alles so tie-
ADD xx%,3 ! risch ernst?
DEFTEXT 1,0,0,13
GRAPHMODE 0
RETURN
> PROCEDURE sbb_bell ! Klingt wie eine Schweizer Bahnhofglocke.
~XBIOS(28,&HF8,7+128) ! 3 Tonkanäle
~XBIOS(28,16,8+128) ! Hüllk. Kanal 1
~XBIOS(28,16,9+128) ! Hüllk. Kanal 2
~XBIOS(28,16,10+128) ! Hüllk. Kanal 3
~XBIOS(28,0,11+128) ! Hüllk. Lowbyte
~XBIOS(28,30,12+128) ! Hüllk. Highbyte
~XBIOS(28,9,13+128) ! Hüllk. abklingend
~XBIOS(28,63,0+128) ! Tonfreq. Lowbyte Kanal 1
~XBIOS(28,0,1+128) ! Tonfreq. Highbyte Kanal 1
~XBIOS(28,50,2+128) ! Tonfreq. Lowbyte Kanal 2
~XBIOS(28,0,3+128) ! Tonfreq. Highbyte Kanal 2
~XBIOS(28,37,4+128) ! Tonfreq. Lowbyte Kanal 3
~XBIOS(28,0,5+128) ! Tonfreq. Highbyte Kanal 3
RETURN
> PROCEDURE editor ! Aufruf zu zusätzlichem Editor, z.B. Textvergleich.
LOCAL edit_par$,ret%
'
ret%=1 ! Damit ohne Parameter Editor gestartet werde kann.
IF ff$<>"Nur GFA-File laden!" ! LST-File nur suchen wenn GFA-File geladen.
IF EXIST(LEFT$(ff$,(LEN(ff$)-4))+".LST") ! Zum geladenen GFA-File das
edit_par$=LEFT$(ff$,(LEN(ff$)-4))+".LST" ! gleichnamige LST-File suchen.
ELSE
CLR edit_par$ ! Parameter löschen, falls keines gesendet wird.
sbb_bell
ALERT 1,"Sie haben vergessen ein |LST-File zu erzeugen! |Weiter zum Editor oder zurück |ins Menu?",1," Editor | Menu ",ret%
ENDIF
ENDIF
IF ret%=1 ! Editor starten mit oder ohne File-Parameter.
hintergrund(7)
revrs_curs
PRINT AT(1,18);"Starting (Editor): ";editor$
PRINT AT(1,19);"Starting (LST-File): ";edit_par$
norm_curs
PAUSE 37
t%=TIMER
SHOWM
e%=EXEC(0,editor$,CHR$(LEN(edit_par$))+edit_par$+CHR$(0),"") ! Run
IF e%=-33 ! Editor gibt es nicht.
sbb_bell
ALERT 1,"|Tut mir leid, aber der |zusätzliche Editor ist |in St. Anderswo! ",1," Na ja. ",dummy%
@cls
ELSE
@cls
revrs_curs
PRINT "Arbeitszeit im zusätzlichen Editor: "
norm_curs
tmx
ENDIF
ENDIF
RETURN
> PROCEDURE finder ! Aufruf eines File-Finders, z.B. QUICKFIND.
LOCAL ret%
'
hintergrund(7)
revrs_curs
PRINT AT(1,18);"Starting (Finder): ";finder$
norm_curs
PAUSE 37
t%=TIMER
IF EXIST(finder$)
stor_curs
revrs_curs
PRINT AT(1,24);
PRINT " ACHTUNG: Bei Verwendung des QUICKFIND.PRG <Control-C> - "
PRINT " Abbruch nicht benutzen, sonst Verhalten der Maus gestört! ";
norm_curs
restor_curs
e%=EXEC(0,finder$,"","") ! Run
@cls
revrs_curs
PRINT "Arbeitszeit im File-Finder: "
norm_curs
tmx
ELSE
sbb_bell
ALERT 1,"|Tut mir leid, aber der File- |Finder ist nicht zu finden! ",1," Na ja. ",dummy%
@cls
ENDIF
RETURN
> PROCEDURE gulam ! Aufruf des GULAM-Zeilenkommandointerpreters.
pfad_file$=gulam$
pfad_nur
p_current$=pfadnur$
new_path_write ! Pfad damit GULAM.PRG sein GULAM.G findet.
hintergrund(7)
revrs_curs
PRINT AT(1,17);"Executing: ";UPPER$(gulam$)
norm_curs
PAUSE 37
HIDEM
t%=TIMER
e%=EXEC(0,gulam$,"","") ! GULAM - Aufruf.
main_path_write ! Hauptpfad wiederherstellen.
SHOWM ! Wenn von xxxx.TOS retour nötig.
@cls ! Zurück von ext. Programm, wieder grauer Hintergrund.
cur
revrs_curs
PRINT "Arbeitszeit im GULAM:"
norm_curs
tmx
RETURN
> PROCEDURE complinkend ! Blinkende Meldung nach Comp.- und Link.-Ende.
INC blink%
IF (blink% MOD 6=0) OR (blink% MOD 6=1) OR (blink% MOD 6=2)
revrs_curs
ENDIF
stor_curs
PRINT "Compilieren und Linken erfolgreich beendet!"
restor_curs
norm_curs
RETURN
> FUNCTION chk_file(VAR f$)
$F% ! Compiler: ENDFUNC-Behandlung.
IF LEN(f$)
IF EXIST(f$)
RETURN TRUE
ENDIF
ENDIF
do_fsel(".GFA",f$)
IF LEN(f$)
IF EXIST(f$)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
> PROCEDURE file_exist(VAR weiter%)
pfad_file$=MID$(tprg$,7) ! Filtert Pfad + Filename.
pfad_nur ! Filtert Pfad.
IF EXIST(pfad_file$) ! Existiert Pfad u. PRG/TOS-File bereits?
sbb_bell
ALERT 2,"Dateiname existiert bereits! | |Überschreiben = Weiter |Zurück = Menu ",1," Weiter | Menu ",weiter%
IF weiter%=1
weiter%=TRUE
ELSE
weiter%=NOT TRUE ! Keine weiteren Aktionen.
ENDIF
ELSE
weiter%=TRUE
ENDIF
RETURN
> PROCEDURE file_parameter(VAR pfad$,anz_zeichen%) ! Filepar. aus der BASEPAGE
LOCAL i%,c|
'
adr%=BASEPAGE
FOR i%=129 TO 256
anz_zeichen%=i%-129
c|=PEEK(adr%+i%)
EXIT IF c|=0 OR c|=13 ! Endung NULL oder <RETURN>.
pfad$=pfad$+CHR$(c|) !
NEXT i%
pfad$=UPPER$(pfad$)
RETURN
> PROCEDURE file_von_pfad ! Siehe Prozedur 'do_fsel(...)'.
LOCAL i%
'
FOR i%=0 TO 13 ! Maskiert den Filenamen mit Extension
f$=RIGHT$(p1$,i%) ! aus dem ganzen Pfad.
EXIT IF LEFT$(f$,1)="\"
NEXT i%
f$=RIGHT$(f$,(LEN(f$)-1)) ! Conversion in Grossbuchstaben.
RETURN
> PROCEDURE pfad_nur
LOCAL i%,n$
'
FOR i%=0 TO 13
n$=RIGHT$(pfad_file$,i%)
EXIT IF LEFT$(n$)="\"
NEXT i%
pfadnur$=LEFT$(pfad_file$,(LEN(pfad_file$)-i%))+"\"
RETURN
> PROCEDURE new_path_write ! Neuer Pfad für externes Programm.
CHDRIVE p_current$ ! Laufwerk \ Pfad
CHDIR MID$(p_current$,3,(LEN(p_current$)-3)) ! Pfad alleine ohne Laufwerk.
RETURN
> PROCEDURE main_path_write ! Pfad dieses Menu wiederherstellen.
CHDRIVE maindrive$
CHDIR mainpath_only$
RETURN
> PROCEDURE path_read ! Testen ob aktueller Pfad übernommen wurde.
drive_read$=CHR$(GEMDOS(25)+65) ! Laufwerk
path_read$=DIR$(0) ! Pfad ohne Laufwerk
RETURN
> PROCEDURE menudlx.dat ! Lesen des GFA-MENU-Deluxe-Filesystem.
IF EXIST(mainpath$+"menudlx.dat")
OPEN "I",#1,mainpath$+"menudlx.dat"
INPUT #1,gfaint$,gfacom$,gfalnk$,gfarcs$,editor$,finder$,gulam$,tobj$,tprg$,tlib$
CLOSE #1
ELSE
sbb_bell
ALERT 1,"|Tut mir leid, aber |MENUDLX.DAT konnte ich |nicht finden! ",2," Weiter | Abbruch",ret%
IF ret%=2
ende
ENDIF
ENDIF
'
gfaint$=mainpath$+gfaint$ ! Interpreter GFA_3.PRG
gfacom$=mainpath$+gfacom$ ! Compiler BCOMP.PRG
gfalnk$=mainpath$+gfalnk$
gfarcs$=mainpath$+gfarcs$
' editor$=editor$ ! Zusätzlicher Editor, Filefinder und UNIX-
' finder$=finder$ ! Zeilenkommandointerpreter sind ausserhalb des
' gulam$=gulam$ ! der GFA-3.5-Basic-Fileordnung.
tobj$="G3OBJ="+mainpath$+tobj$
tprg$="G3PRG="+mainpath$+tprg$
tlib$="G3LIB="+mainpath$+tlib$
RETURN
> PROCEDURE relat_absol_filepar ! Pfad in BASEPAGE absolut oder relativ?
IF MID$(pfad$,2,1)<>":"
pfad$=mainpath$+pfad$ ! Wenn der eingegebene Pfad relativ ist.
ENDIF
RETURN
'
' Testprozeduren:
> PROCEDURE path_test ! Nur für Test (Direct_Mode).
path_read ! Testen ob aktueller Pfad übernommen wurde.
PRINT
PRINT
PRINT "Laufwerk: ";drive_read$
PRINT "Nur Pfad: ";path_read$
RETURN
> PROCEDURE file_system ! Auch für Test (Direct-Mode).
esc%=27 ! Falls im Direct-Mode gestartet wird.
CLS
revrs_curs
PRINT " Filesystem des GFA-MENU-Deluxe. "
norm_curs
PRINT
PRINT " Aktueller Pfad: ";mainpath$
PRINT
PRINT " Interpreter (GFA_3.PRG): ";gfaint$
PRINT " Compiler (GFA_BCOM.PRG): ";gfacom$
PRINT " Linker (GL-PRG): ";gfalnk$
PRINT " Resource-C-S (RCS2.PRG): ";gfarcs$
PRINT " Zusätzlicher Editor: ";editor$
PRINT " Finder /QUIKFIND.PRG): ";finder$
PRINT " UNIX-Shell (GULAM.PRG): ";gulam$
PRINT
PRINT " Defaultpfad Objectcode: ";tobj$
PRINT " Defaultpfad (TEST.PRG): ";tprg$
PRINT " Defaultfad (GFA3LIB): ";tlib$
PRINT
revrs_curs
PRINT AT(1,25);" Weiter: Drücke Keyboard- oder Maustaste. ";
norm_curs
catchkey
REPEAT
UNTIL MOUSEK=0
REPEAT
UNTIL INKEY$<>"" OR MOUSEK
CLS
RETURN
'
' Escape-Sequenzen:
> PROCEDURE curs_home
PRINT CHR$(esc%)+"H";
RETURN
> PROCEDURE revrs_curs
PRINT CHR$(esc%)+"p";
RETURN
> PROCEDURE norm_curs
PRINT CHR$(esc%)+"q";
RETURN
> PROCEDURE stor_curs
PRINT CHR$(esc%)+"j";
RETURN
> PROCEDURE restor_curs
PRINT CHR$(esc%)+"k";
RETURN
> PROCEDURE cl_line_after_curs ! Zeile löschen ab Cursor
PRINT CHR$(esc%)+"K";
RETURN
> PROCEDURE cls_after_curs ! Bildschirm löschen ab Cursor
PRINT CHR$(esc%)+"J";
RETURN
'
> PROCEDURE catchkey ! Abfangen unerlaubter Tastenbetätigungen
LOCAL keybuff%
'
REPEAT
KEYTEST keybuff%
UNTIL keybuff%=0
RETURN
> PROCEDURE taste ! Rückgabe-Charakter in 'key%' und 'key$' (Global)
catchkey
key%=INP(2)
key$=CHR$(key%)
RETURN
'
'
' >>>>>>>>>>>>>>>>>>>>>>>>>>> E N D E <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
'